# -*- coding: utf-8 -*-
'''
Created on 15 de Nov de 2011
@author: Francisco do Ó
@number: 5202
'''

from javax.swing import * #importar biblioteca Swing
from java.awt import * #importar biblioteca awt
import commonModule #módulo commonModule - tratamento dos dados estatísticos
import JyModel #módulo JyModel - código relacionado com a base de dados 

'''
Método que preenche as combo boxes com a informação respectiva
@param box_name: combo_box alvo
@param fileName: nome do ficheiro com a informação a retirar
'''   
def fill_box(box_name, fileName):
    #chama o método para carregar o conteúdo do ficheiro num array
    fileLoad = commonModule.LoadFileIntoArray(fileName)
    array = fileLoad.loadList()
        
    for x in range(len(array)):
        for element in array[x]: 
            #insere os dados obtidos na combo box
            box_name.addItem(array[x][0])  
            pass 
    pass

'''
@param box_name: list box alvo
@param fileName: nome do ficheiro com a informação a retirar
Método que preenche uma list box com a informação respectiva
'''   
def fill_list(list_name, fileName):  
    list_name.clear()
    #call to the function to load the contains of a text file into an array
    j = 0
    fileLoad = commonModule.LoadFileIntoArray(fileName)
    array = fileLoad.loadList()
    
    for x in range(len(array)):
        list_name.addElement(str(array[x]))
    
'''
class JyIntreface - Interface da aplicação
'''
class JyInterface: 
  def __init__(self):

        # These lines setup the basic frame, size and layout
        # the setDefaultCloseOperation is required to completely exit the app
        # when you click the close button
    self.frame = JFrame("Jython Interface")
    self.frame.setSize(1280, 720)
    self.frame.setLayout(GridLayout(3,1))
    self.frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)

    #Query Buttons
    self.listpane = JScrollPane()
    self.panel = JPanel()
    self.colorB = Color(185,211,238) 
    self.panel.setBackground(self.colorB)
    self.panel.setLayout(GridLayout(4,1));
    self.searchTitle = JLabel("Procuras Globais")
    font = Font("Verdana", Font.BOLD, 20);
    self.searchTitle.setFont(font)
    #botões das procuras
    self.queryOneBut = JButton('Procura 1 - Numero de Professores por Estabelecimento por Ano'
                          ,actionPerformed = lambda evt : JyInterface.onClickOne(self))
    self.queryTwoBut = JButton('Procura 2 - Numero de Professores por Estabelecimento por Categoria por Ano'
                          ,actionPerformed = lambda evt : JyInterface.onClickTwo(self))
    self.queryThreeBut = JButton('Procura 3 - Numero de Professores por Estabelecimento por Grau por Ano'
                            ,actionPerformed = lambda evt : JyInterface.onClickThree(self))
    self.panel.add(self.searchTitle)
    self.panel.add(self.queryOneBut)
    self.panel.add(self.queryTwoBut)
    self.panel.add(self.queryThreeBut)   
    #Lista que terá os resultados
    self.listModel = DefaultListModel() 
    self.list = JList(self.listModel)
    self.listpane.setPreferredSize(Dimension(1200,200))
    self.listpane.getViewport().setView((self.list))
    #Botão para iniciar servidor http local
    self.htmlBut = JButton('Ver Resultados em formato HTML'
                      ,actionPerformed = lambda evt : JyInterface.onClickHtml(self))
    self.htmlBut.setSize(450, 20)
    self.panel2 = JPanel()
    self.panel2.setBackground(self.colorB)
    self.panel2.add(self.listpane)
    self.panel2.add(self.htmlBut) 
    #Gráficos
    a = "Procuras Específicas"
    self.graphTitle = JLabel(a.decode('utf-8'))
    self.font = Font("Verdana", Font.BOLD, 20);
    self.graphTitle.setFont(font)
    #Primeira procura
    self.combo_box_estab = JComboBox()
    self.combo_box_estab_title = JLabel("Procura 1 - Seleccione o Estabelecimento Pretendido")
    self.combo_box_estab.setPreferredSize(Dimension(400,15))
    self.specOneBut = JButton('Procurar'
                    ,actionPerformed = lambda evt : JyInterface.selectSpecOne(self))
    #Segunda procura
    self.combo_box_estab2 = JComboBox()
    self.combo_box_cat = JComboBox()
    self.combo_box_estab2_title = JLabel("Procura 2 - Seleccione o Estabelecimento Pretendido")
    self.combo_box_estab2.setPreferredSize(Dimension(400,15))
    self.combo_box_cat.setPreferredSize(Dimension(400,15))
    self.specTwoBut = JButton('Procurar'
                ,actionPerformed = lambda evt : JyInterface.selectSpecTwo(self))
    #Terceira procura
    self.combo_box_estab3 = JComboBox()
    self.htmlBut.setSize(450, 20)
    self.combo_box_grau = JComboBox()
    self.combo_box_estab3_title = JLabel("Procura 3 - Seleccione o Estabelecimento Pretendido")
    self.combo_box_estab3.setPreferredSize(Dimension(400,15))
    self.combo_box_grau.setPreferredSize(Dimension(400,15))
    self.specThreeBut = JButton('Procurar'
                              ,actionPerformed = lambda evt : JyInterface.selectSpecThree(self))
    self.panel3 = JPanel()
    self.colorO = Color(255,236,139) 
    self.panel3.setBackground(self.colorO)
    self.panel3.setLayout(GridLayout(14,2));
    self.panel3.add(self.graphTitle)
    self.panel3.add(self.combo_box_estab_title)
    self.panel3.add(self.combo_box_estab)
    self.panel3.add(self.specOneBut)
    self.panel3.add(JSeparator(SwingConstants.HORIZONTAL));
    self.panel3.add(self.combo_box_estab2_title)
    self.panel3.add(self.combo_box_estab2)
    self.panel3.add(self.combo_box_cat)
    self.panel3.add(self.specTwoBut)
    self.panel3.add(JSeparator(SwingConstants.HORIZONTAL));
    self.panel3.add(self.combo_box_estab3_title)
    self.panel3.add(self.combo_box_estab3)
    self.panel3.add(self.combo_box_grau)
    self.panel3.add(self.specThreeBut)
    #Preencher as combo boxes
    fill_box(self.combo_box_estab,  './lists/estabelecimentos.csv')
    fill_box(self.combo_box_estab2,  './lists/estabelecimentos.csv')
    fill_box(self.combo_box_estab3,  './lists/estabelecimentos.csv')
    fill_box(self.combo_box_cat, './lists/categorias.csv')
    fill_box(self.combo_box_grau, './lists/graus.csv')
    
    self.frame.add(self.panel)
    self.frame.add(self.panel2)
    self.frame.add(self.panel3)

    self.frame.pack()
    self.frame.setVisible(True)

    
  #Eventos dos botões das três procuras 
  def onClickOne(self):
    #Preenche a lista com os dados da primeira procura
    fill_list(self.listModel, './lists/oneocur.csv')
    pass
  def onClickTwo(self): 
    #Preenche a lista com os dados da segunda procura
    fill_list(self.listModel, './lists/twoocur.csv')
    pass
  def onClickThree(self): 
    #Preenche a lista com os dados da terceira procura
    fill_list(self.listModel, './lists/threeocur.csv')
    pass
  def onClickHtml(self):
    #Visualizar dados em formato HTML
    commonModule.stats_to_html()
    pass

  #Procuras específicas
  #Primeira procura específica
  def selectSpecOne(self):
    self.listModel.clear() #limpa a lista
    #Obtém estabelecimento escolhido na combo box
    selectedEstab = self.combo_box_estab.getSelectedItem().decode('utf-8')
    #Efectua a procura e devolve os resultados entre os anos 2000 e 2010
    commonModule.SpecQueryOne(selectedEstab) 
    #Adiciona os resultados na lista
    for i in range(len(commonModule.specOne)):
        self.listModel.addElement(commonModule.specOne[i])  
    pass
  #Segunda procura específica
  def selectSpecTwo(self):
    self.listModel.clear() #limpa a lista
    #Obtém estabelecimento escolhido na combo box
    selectedEstab = self.combo_box_estab.getSelectedItem().decode('utf-8')
    #Obtém categoria escolhida na combo box
    selectedCat = self.combo_box_cat.getSelectedItem().decode('utf-8')
    #Efectua a procura e devolve os resultados entre os anos 2000 e 2010
    commonModule.SpecQueryTwo(selectedEstab , selectedCat) 
    #Adiciona os resultados na lista
    for i in range(len(commonModule.specTwo)):
        self.listModel.addElement(commonModule.specTwo[i])  
    pass
  #Terceira procura específica
  def selectSpecThree(self):
    self.listModel.clear() #limpa a lista 
     #Obtém estabelecimento escolhido na combo box
    selectedEstab = self.combo_box_estab.getSelectedItem().decode('utf-8')
    #Obtém grau escolhido na combo box
    selectedDegree = self.combo_box_grau.getSelectedItem().decode('utf-8')
    #Efectua a procura e devolve os resultados entre os anos 2000 e 2010
    commonModule.SpecQueryThree(selectedEstab , selectedDegree) 
    #Adiciona os resultados na lista
    for i in range(len(commonModule.specThree)):
        self.listModel.addElement(commonModule.specThree[i])  
    pass

if __name__ == '__main__':   
    JyInterface()
        
